#include <boost/asio.hpp>
#include <iostream>
#include <cstring>
enum msg_type
{
    msg_type_unknown,
    msg_type_heartbeat = 1000,      // 心跳包
    msg_type_register,              // 注册
    msg_type_login,                 // 登陆
    msg_type_getofriendlist,        // 获取好友列表
    msg_type_finduser,              // 查找用户
    msg_type_operatefriend,         // 添加、删除等好友操作
    msg_type_userstatuschange,      // 用户信息改变通知
    msg_type_updateuserinfo,        // 更新用户信息
    msg_type_modifypassword,        // 修改登陆密码
    msg_type_creategroup,           // 创建群组
    msg_type_getgroupmembers,       // 获取群组成员列表
    msg_type_chat = 1100,           // 单聊消息
    msg_type_multichat,             // 群发消息
    msg_type_kickuser,              // 被踢下线
    msg_type_updateteaminfo,        // 更新用户好友分组信息
    msg_type_modifyfriendmarkname,  // 更新好友备注信息
    msg_type_movefriendtootherteam, // 移动好友至
};
typedef char name_t[32];
struct registet_s
{
    name_t username;
    name_t password;
    name_t nickname;
};
// int main()
// {
//     boost::asio::streambuf sb;
//     // 写入字符串
//     std::ostream os(&sb);

//     char data[] = "Hello, world!";
//     auto ii = 66UL;
//     // std::cout << (const char *)&ii << std::endl;

//     // os << (const char *)&ii;
//     os.write((const char *)&ii, sizeof(ii));
//     std::cout << sizeof(msg_type) << std::endl; // 4
//     std::cout << sizeof(size_t) << std::endl;   // 8
//     std::cout << sizeof(data) << std::endl;     // 14
//     os.write(data, sizeof(data));

//     std::cout << sb.size() << std::endl; // 22

//     // 读取字符串
//     std::istream is(&sb);
//     // std::string s;
//     // size_t i;
//     // is >> i;
//     // std::cout << i << std::endl;
//     // std::getline(is, s);
//     // std::cout << s << std::endl; // 输出: Hello, world!
//     size_t datai;
//     char data2[sizeof(data)];
//     // char mess[10];
//     is.read((char *)&datai, sizeof(size_t));
//     std::cout << datai << std::endl;
//     std::cout << sb.size() << std::endl;
//     sb.consume(sb.size());
//     std::cout << sb.size() << std::endl;
//     return 0;
// }

int main()
{
    boost::asio::streambuf sb;
    std::iostream io(&sb);
    registet_s msg{"username1", "password2", "nickname3"};
    std::cout << sizeof(msg) << std::endl;
    std::cout << msg.username << std::endl;
    std::cout << msg.password << std::endl;
    std::cout << msg.nickname << std::endl;
    io.write((const char *)&msg, sizeof(msg));
    registet_s msg2;
    std::cout << sizeof(msg2) << std::endl;
    std::cout << msg2.username << std::endl;
    std::cout << msg2.password << std::endl;
    std::cout << msg2.nickname << std::endl;
    io.read((char *)&msg2, sizeof(msg2));
    std::cout << sizeof(msg2) << std::endl;
    std::cout << msg2.username << std::endl;
    std::cout << msg2.password << std::endl;
    std::cout << msg2.nickname << std::endl;
    return 0;
}